home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.1 (Developer) [x86] / NeXT Step 3.1 Intel dev.cdr.dmg / NextDeveloper / Headers / bsd / dev / KeyMap.h < prev    next >
Encoding:
Text File  |  1993-04-30  |  2.8 KB  |  102 lines

  1. /*     Copyright (c) 1992 NeXT Computer, Inc.  All rights reserved. 
  2.  *
  3.  * KeyMap.m - Generic keymap string parser and keycode translator.
  4.  *
  5.  * HISTORY
  6.  * 19 June 1992    Mike Paquette at NeXT
  7.  *      Created. 
  8.  */
  9.  
  10. #import <objc/Object.h>
  11. #import <bsd/dev/ev_keymap.h>
  12.  
  13. /*
  14.  * Key ip/down state is tracked in a bit list.  Bits are set
  15.  * for key-down, and cleared for key-up.  The bit vector and macros
  16.  * for it's manipulation are defined here.
  17.  */
  18. #define EVK_BITS_PER_UNIT    32
  19. #define EVK_BITS_MASK        31
  20. #define EVK_BITS_SHIFT        5    // 1<<5 == 32, for cheap divide
  21. #define EVK_NUNITS ((NX_NUMKEYCODES + (EVK_BITS_PER_UNIT-1))/EVK_BITS_PER_UNIT)
  22.  
  23. typedef    unsigned long    kbdBitVector[EVK_NUNITS];
  24.  
  25. #define EVK_KEYDOWN(n, bits) \
  26.     (bits)[((n)>>EVK_BITS_SHIFT)] |= (1 << ((n) & EVK_BITS_MASK))
  27.  
  28. #define EVK_KEYUP(n, bits) \
  29.     (bits)[((n)>>EVK_BITS_SHIFT)] &= ~(1 << ((n) & EVK_BITS_MASK))
  30.  
  31. #define EVK_IS_KEYDOWN(n, bits) \
  32.     (((bits)[((n)>>EVK_BITS_SHIFT)] & (1 << ((n) & EVK_BITS_MASK))) != 0)
  33.  
  34. /*
  35.  * The following protocol must be implemented by any object which is a
  36.  * KeyMap delegate.
  37.  */
  38. @protocol KeyMapDelegate
  39.  
  40. - keyboardEvent    :(int)eventType
  41.     flags    :(unsigned)flags
  42.     keyCode    :(unsigned)keyCode
  43.     charCode:(unsigned)charCode
  44.     charSet    :(unsigned)charSet;
  45.  
  46. - keyboardSpecial:(unsigned)eventType
  47.     flags     :(unsigned)flags
  48.     keyCode    :(unsigned)keyCode
  49.     specialty:(unsigned)flavor;
  50.  
  51. - updateEventFlags:(unsigned)flags;    /* Does not generate events */
  52.  
  53. - (unsigned)eventFlags;            // Global event flags
  54. - (unsigned)deviceFlags;        // per-device event flags
  55. - setDeviceFlags:(unsigned)flags;    // Set device event flags
  56. - (BOOL)alphaLock;            // current alpha-lock state
  57. - setAlphaLock:(BOOL)val;        // Set current alpha-lock state
  58. - (BOOL)charKeyActive;            // Is a character gen. key down?
  59. - setCharKeyActive:(BOOL)val;        // Note that a char gen key is down.
  60.  
  61. @end /* KeyMapDelegate */
  62.  
  63. @interface KeyMap: Object
  64. {
  65. @private
  66.     NXParsedKeyMapping    curMapping;    // current system-wide keymap
  67.     id            keyMappingLock;    // Lock guarding keyMapping.
  68.     id            delegate;    // KeyMap delegate
  69.     BOOL            canFreeMapping;    // YES if map can be IOFreed.
  70. }
  71. - initFromKeyMapping    :(const unsigned char *)mapping
  72.         length    :(int)len
  73.         canFree    :(BOOL)canFree;
  74. - setKeyMapping    :(const unsigned char *)mapping
  75.         length    :(int)len
  76.         canFree    :(BOOL)canFree;
  77. - (const unsigned char *)keyMapping:(int *)len;
  78. - (int)keyMappingLength;
  79.  
  80. - setDelegate:(id)delegate;
  81. - delegate;
  82.  
  83. - free;
  84.  
  85. -doKeyboardEvent:(unsigned)key
  86.     direction:(BOOL)down
  87.     keyBits    :(kbdBitVector)keyBits;
  88.  
  89. /* Private API */
  90. - _parseKeyMapping:(const unsigned char *)mapping
  91.     length:(int)mappingLen
  92.     into:(NXParsedKeyMapping *)newMapping;
  93.  
  94. - (void)_calcModBit    :(int)bit
  95.         keyBits    :(kbdBitVector)keyBits;
  96. - (void)_doModCalc:(int)key keyBits:(kbdBitVector)keyBits;
  97. - (void)_doCharGen:(int)keyCode
  98.         direction:(BOOL)down;
  99.  
  100. @end
  101.  
  102.